package ${filePackageName};

/**
 * Token 抽象类
 * @author ${projectAuthor}
 * @version 1.0
 * @date ${nowDate}
 */
public abstract class Token {

    public static final int TOKEN_MIN_LENGTH = 13 + 32 + 1;

    /**
     * token 生成规则 获取accessKey
     * sysCode + accessKey 与 userId 加密
     */
    private String token;

    /**
     * accessKey
     */
    private String accessKey;

    /**
     * 开始时间
     */
    private long startTime;

    /**
     * 截止有效时间
     *
     */
    private long endTime;

    /**
     * 有效时长 毫秒数
     */
    private long expireTime;

    /**
     * 用户信息 例如ID
     */
    private String tokenValue;

    public String getAccessKey() {
        return accessKey;
    }

    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }

    public long getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(long expireTime) {
        this.expireTime = expireTime;
    }

    public String getTokenValue() {
        return tokenValue;
    }

    public void setTokenValue(String tokenValue) {
        this.tokenValue = tokenValue;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public long getStartTime() {
        return startTime;
    }

    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }

    public long getEndTime() {
        return endTime;
    }

    public void setEndTime(long endTime) {
        this.endTime = endTime;
    }

    /**
     * 设置data
     * @param tokenData
     */
    public abstract void setData(TokenData tokenData);

    /**
     * 获取data 返回用户信息 例如 ID
     * @param valid 是否校验过期，如校验则校验是否有效 有效的话 增加时效 返回data 无效的话 返回空 不校验 直接返回data
     * @return
     */
    public abstract String getData(boolean valid);

    /**
     * 延长有效期
     */
    public abstract void continueLife();

    /**
     * 校验token
     * @return
     */
    public abstract boolean validate();
}
